

////2025-06-10---
 ////发电机控制器物模型-v1.0

//  #include "dev_generator.h"

#ifndef __DEV_GENERATOR_H__
#define __DEV_GENERATOR_H__

#include "dev_module.h"
#include "iot_message.pb.h"
#include <stdint.h>
#include "iot_node.h"




#define  generator_max_scale_0_01mm   (100000U)    //1000mm===1000x100 (0.01mm)
#define  generator_max_dev_addr        (245U)      // 设备地址	R/W	否	配置参数	uint8_t	0~255
#define  generator_max_channel          (31U)      // 设备通道编号	R/W	否	配置参数	uint8_t	0~31


#define  generator_RO_run_param_of_node_iot_id_begin          (43521U)   //43521	volt1	单体电压1	RO
#define  generator_RO_run_param_of_node_iot_id_end            (45700U)   //B284	45700	firstCap300	初始容量300	RO--ver.<<蓄电池传感器物模型-v1.7>>



/////-----设备类型----
//#define   DEV_GENERATOR_TYPE     (0xD007)     //油机传感器 


////以下枚举的取值 需要结合 数组 generator_iot_id_table[generator_index_end]的下标进行关联的定义---同步更新----

typedef enum{
    generator_index_run_data_begin      = 0,    // 设备运行参数
    generator_index_run_data_end        = 12,    // 设备运行参数-------------超过 8个时需要分帧处理
    generator_index_config_data_begin   = 12,     // 设备配置参数-
    generator_index_factory_info_begin  = 22,   // 设备出厂信息   --  
    generator_index_end = generator_index_factory_info_begin+5,
} generator_attr_index_e;



#define  generator_iot_id_key_name_table_end  (10u)            //所有写命令的总数
#define  generator_iot_id_key_name_table_mult_write_end  (4u)  //-能同时多个写的命令的结尾下标


extern const dev_attr_key_name_t  generator_iot_id_key_name_table[generator_iot_id_key_name_table_end];



#pragma pack(1)


typedef union{
    struct{
                                        // "0=无告警，1=有告警
        uint32_t oil_level :       1;   // bit0：机油油位告警
        uint32_t oil_temper :      1;   // bit1：机油温度告警--- Engine oil temperature alarm
        uint32_t power_battery :   1;   // bit2：动力蓄电池告警
        uint32_t coolant_temper :  1;   // bit3：冷却液温度告警
        uint32_t generator_fault:  1;   // bit4：发电机故障告警
        uint32_t radiator_fault :  1;   // bit5：散热器故障告警

        uint32_t res1:26;              // 其余：保留"
    }bit;

    uint32_t value;
} generator_alarm_u;



// bit0: Engine oil level alarm
// bit1: Engine oil temperature alarm
// bit2: Power storage battery alarm
// bit3: Coolant temperature alarm
// bit4: Generator fault alarm
// bit5: Radiator fault alarm
// Others: Reserved"


//烟雾传感器（D006H）的数据
///---------RO 数据--------//
typedef struct{

////---发电机控制器物模型-v1.2--------------------------------
uint32_t		genVolt	;//	1388	5000	发电机输出电压	RO	否	运行参数		0.1V
uint32_t		genCurr	;//	1389	5001	发电机输出电流	RO	否	运行参数		0.1A
uint32_t		genPwr	;//	138A	5002	发电机输出功率	RO	否	运行参数		W
uint32_t		genSpeed	;//	138B	5003	转速	RO	否	运行参数		RPM
uint32_t		genTorque	;//	138C	5004	扭矩	RO	否	运行参数		Nm
uint32_t		runTime	;//	138D	5005	运行时长	RO	否	运行参数		second
uint32_t		fuelUsed	;//	138E	5006	燃油油耗	RO	否	运行参数		L
int32_t		  oilTempe	;//	139C	5020	机油温度	RO	否	运行参数		degreeC  ////---发电机控制器物模型-v1.3---
uint32_t		oilLevel	;//	138F	5007	机油油位	RO	否	运行参数	0~100	%
											
											
uint32_t		alarm	;//	1391	5009	告警	RO	否	运行参数		
uint16_t		engiOpState	;//	1392	5010	引擎操作状态	RO	否	运行参数		
uint16_t		systemStatus	;//	1393	5011	系统状态	RO	否	运行参数		


 //   generator_alarm_u  alarm	;//	告警	RO	1391	5009	否	运行参数	uint32_t

} generator_data_t;
 

///---------R/W	配置参数--------//
typedef struct{

    uint8_t   addr;              //烟雾设备地址  0~255			
    uint8_t   channel;           //0x0602	烟雾设备通道编号	0~31	

  //配置参数----WO------只写不可读------- 
uint16_t		setMode	;//	1394	5012	设置模式	WO	否	运行参数	0-4	
uint16_t		manualStart	;//	1395	5013	手动模式启停	WO	否	运行参数	0-1	
uint16_t		autoStartCfg	;//	1396	5014	自启动设置	WO	否	运行参数	0-1	
uint16_t		almMute	;//	1397	5015	告警静音	WO	否	运行参数	1	
uint16_t		almReset	;//	1398	5016	告警复位	WO	否	运行参数	1	
uint16_t		genSwOn	;//	1399	5017	发电机合闸	WO	否	运行参数	1	
uint16_t		mainsSwOn	;//	139A	5018	市电合闸	WO	否	运行参数	1	

//配置参数----R/W-----可读写-------
uint32_t		thOilLevelLow	;//	1390	5008	机油油位低阈值	R/W	否	配置参数	0~100	%
int32_t		  thOilTLow	;//	139D	5021	机油温度低阈值	R/W	否	配置参数		degreeC////---发电机控制器物模型-v1.3---
int32_t		  thOilTHi	;//	139E	5022	机油温度高阈值	R/W	否	配置参数		degreeC////---发电机控制器物模型-v1.3---


} generator_config_t;




//---配置节点信息----------


typedef union
{
	struct{	
		
	  uint16_t online                  :1;	  //节点在线标志-----1:在线，0:离线，

	  uint16_t res                     :15;  
		
	}bit;
	
  uint16_t all;

} generator_node_flags_u;




//#define   BATTERY_NODE_NUM_MAX    (255U)  
#define   BATTERY_NODE_NUM_MAX    (NODE_NUM_MAX)     ///与配置节点总数相关-----



typedef struct{
    generator_data_t      data;
    generator_config_t    config;
    dev_attr_com_info_t  info;
    generator_node_flags_u  flags;
 //   char   dev_name_str[32];   
} generator_attr_t;


#pragma pack()

extern const  uint16_t  generator_iot_id_table[generator_index_end];

/**
 * @brief 
 * 
 */
void generator_param_init(void);

uint8_t generator_add_obj(uint8_t idx,uint8_t channel,uint8_t addr);


/**
 * @brief 
 * 
 * @param in idx 
 * @return generator_attr_t ==NULL 查询出错,   !NULL 查询ok
 */
generator_attr_t*  generator_get_obj(uint8_t idx) ;  //generator_attr_get


/**
 * @brief generator_set_obj() 赋值节点数据
 * 
 * @param in idx
 * @param in p_attr
 * @return 0=失败，1=成功 
 */
uint8_t  generator_set_obj(uint8_t idx,generator_attr_t* p_attr )  ;



  //  generator_index_run_data_begin      = 0,    // 设备运行参数
  //  generator_index_config_data_begin   = 3,    // 设备配置参数
/**
 * @brief 根据下标，获取iot_id 的编号
 * 
 * @param idx 
 */
uint16_t  generator_get_iot_id(uint8_t idx);


/**
 * @brief 
 * 
 * @param attr_id 
 * @param attr_out 
 */
void generator_get_attr(uint8_t idx,uint16_t attr_id, IotModel* attr_out);


/**
 * @brief 
 * 
 * @param attr_in 
 * @return uint8_t 
 */
uint8_t generator_set_attr(uint8_t idx,IotModel* attr_in);


void generator_test_tick_min(uint8_t idx);

////刷新节点运行数据
void generator_update_tick_min(uint8_t idx,int8_t temper ,uint32_t generator );

void generator_obj_update(uint8_t idx,generator_attr_t* pliq_in  );




#endif //------__DEV_GENERATOR_H__




















